import 'package:client/view/user/user.dart';
import 'package:flutter/material.dart';
import 'package:client/provider/app_provider.dart';
import 'package:client/view/chatroom/chatroom.dart';
import 'package:client/view/chat/chat.dart';
import 'package:provider/provider.dart';

class HomeRoute extends StatefulWidget {
  const HomeRoute({super.key});

  @override
  _HomeRouteState createState() => _HomeRouteState();
}

class _HomeRouteState extends State<HomeRoute> {
  // 当前子项索引
  int currentIndex = 0;
  // 子项集
  late List<Widget> _pages;
  // 控制器
  late PageController _controller;

  @override
  void initState() {
    super.initState();

    //防止没有创建
    Provider.of<AppProvider>(context, listen: false);

    // 初始化子项集合
    _pages = [
      ChatroomRoute(),
      ChatRoute(),
      UserRoute(),
    ];
    // 初始化控制器
    _controller = PageController();
    // 预加载所有页面
    for (int i = 0; i < _pages.length; i++) {
      PageStorage.of(context)
          .writeState(context, _pages[i], identifier: ValueKey(i));
    }
    // 全局引用
    AppProvider.appPage = _controller;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // appBar: AppBar(
      //   title: Text('PageView - ZeroFlutter'),
      // ),
      body: PageView.builder(
        //关闭手动滑动
        physics: const NeverScrollableScrollPhysics(),
        // 设置控制器
        controller: _controller,
        // 设置子项集
        // 添加页面滑动改变后，去改变索引变量刷新页面来更新底部导航
        onPageChanged: (value) {
          // currentIndex = value;
          setState(() {
            currentIndex = value;
          });
        },
        itemBuilder: (context, index) {
          return PageStorage.of(context)
                  .readState(context, identifier: ValueKey(index)) ??
              _pages[index];
        },
      ),

      // 底部导航栏
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: currentIndex,
        items: const [
          BottomNavigationBarItem(
            // 图标
            icon: Icon(Icons.home),
            // 文字内容
            label: '聊天室',
          ),
          BottomNavigationBarItem(
            // 图标
            icon: Icon(Icons.airlines),
            // 文字内容
            label: '私聊',
          ),
          BottomNavigationBarItem(
            // 图标
            icon: Icon(Icons.settings),
            // 文字内容
            label: '设置',
          ),
        ],
        onTap: (value) {
          // currentIndex = value;
          setState(() {
            currentIndex = value;
          });
          _controller.jumpToPage(currentIndex);
        },
      ),
    );
  }
}
